Ext.define ('rangoaqui.controller.phone.LoginController', 
{
		extend: 'Ext.app.Controller',
		requires: [
        'Ext.MessageBox'
		],
		config : {
				
				idUsuarioLogado: null,
				
				routes: {
				
						'' : 'loadSplash', 
						'index.html' : 'loadSplash'
				
				},
				
				control: {
				
					'button[action=doLogin]' : {
						tap: 'onLoginAttempt'
					},
					'button[action=doLogout]' : {
						tap: 'onLogout'
					},
					'button[action=goHome]' : {
						tap: 'goHomePage'
					}
				},
				
				refs: {
					
					loginForm: {
						xtype: 'loginForm',
						selector: 'loginForm',
						autoCreate: true
					},
					homePage: {
						xtype: 'homePage',
						selector: 'homePage',
						autoCreate: true
					},
					btLogin: "loginForm [itemId=loginButton]",
					usuario: "loginForm [name=userTextField]",
					senha: "loginForm [name=pwdTextField]"
				}
				
		}, 
		
		setAnimation: function (_type, _direction) {
			Ext.Viewport.getLayout().setAnimation (
			{
				type: _type,
				direction: _direction
			});
		},
				
		launch : function () {
			
				var me = this;

				Ext.ModelMgr.getModel('rangoaqui.model.UsuarioCorrente').load(1, {
					scope : this,
					success : function(cachedLoggedInUser) {
						delete cachedLoggedInUser.phantom;
						// fill up the store.
						var store = Ext.getStore('UsuarioCorrente');
						store.add(cachedLoggedInUser);

						var prevLoginTime = cachedLoggedInUser.get('tempo_ultimo_login'),
							now = new Date(),
							interval = now - prevLoginTime;

						if (interval <= rangoaqui.app.sessionTimeout) {
							console.info('Auto-Login SUCESSO!.');
							this.logUserIn(cachedLoggedInUser);
						} else {
							console.warn('ACABOU A SESSAO');
							Ext.Viewport.setActiveItem(this.getLoginForm());
						}

					},
					failure : function() {
						console.warn('Auto-Login failed (user was not logged in).');
						// user is not logged in, show the login
						Ext.Viewport.setActiveItem(this.getLoginForm());
					}
				});		
		
		},
		
		onLoginAttempt : function (button) {
		
			var usuario = this.getUsuario(),
			      senha = this.getSenha(),
				  credentials = this.checkCredentials(usuario.getValue(), senha.getValue());

			if (credentials.ok) {
				this.doLogin(credentials);				
			} else {
				this.handleLoginFailure("Ops", "Para saber onde rangar você primeiro deve preencher seu usuário e senha :P");
			}
						
		},
		
		logUserIn: function (usuarioCorrente) {
				
			var estabelecimentos = Ext.getStore('Estabelecimento');
			var usuario = Ext.getStore('Usuario');
			
			
				usuario.load({
						scope: this,
						params: {id: usuarioCorrente.get('id_usuario_logado'),start: 0,limit: 1},
				});
			
			
			if  (!estabelecimentos.isLoaded())
				estabelecimentos.load();	
		    
			this.setAnimation ('slide', 'left');
			Ext.Viewport.setActiveItem(this.getHomePage());
		},
		
		onLogout: function () {
			Ext.ModelMgr.getModel('rangoaqui.model.UsuarioCorrente').load(1, 
			{	
				success: function(user) 
				{
							Ext.Msg.alert("Até breve!", "Esperamos ansiosos pelo seu retorno! :)", 
							function () {
									user.erase({
								success: function() {
									window.location.reload();
								}});
							});
												
				},
				
				failure: function() 
				{
					// this should not happen, nevertheless:
					window.location.reload();
				}			
		   }, this);
		},
		
		checkCredentials: function (usuario, senha) {
			var checked = !Ext.isEmpty(usuario) && !Ext.isEmpty(senha),
			ret = {
				ok: checked,
				usuario: usuario,
				senha: senha
			};
			
			return ret;
		},
		
		doLogin: function (credenciais) { //alert (usuario.usuario + usuario.senha);
				this.getBtLogin().setDisabled (true);
			    this.getBtLogin().setText('Um momento... ;)');
			// WEB SERVICE AQUI
			   Ext.Ajax.request({
				 url : 'http://esaleiro.bugs3.com/wsdl/usuarios.php?act=login' + '&usuario=' + credenciais.usuario + '&senha=' + credenciais.senha,
				 method:'POST', 
				 scope : this,
				 callback: function (options, success, response) {
				       var result = JSON.parse (response.responseText); 						
						if (result['success'] == false) {
							this.handleLoginFailure("Ops", "Usuario ou senha errados :'(. Por favor, tente novamente.");
						} else {
						
							var usuarioCorrente = Ext.create('rangoaqui.model.UsuarioCorrente', {
								id: 1, // para facilitar o auto login este model tem um id proprio e FIXO
								id_usuario_logado: result['idUsuario'],
								tempo_ultimo_login: (new Date()).valueOf()
							});
						    
							usuarioCorrente.save	(
								{ 
									success: function () {
											this.handleLoginSuccess(usuarioCorrente);
									}
								},this);								
						} // else				 
				 } // callback
				 
			}); 
       
					
		},
		
		handleLoginSuccess: function (usuarioCorrente) {
			this.getBtLogin().setText('Entrou!');			
			this.logUserIn(usuarioCorrente);
		},
		handleLoginFailure: function (titulo, mensagem) {
			this.getBtLogin().setDisabled (false);
			this.getBtLogin().setText('Entrar');
			Ext.Msg.alert(titulo, mensagem, Ext.emptyFn);
		},
		goHomePage : function () {
			this.setAnimation ('slide', 'right');
			Ext.Viewport.setActiveItem(this.getHomePage());
		}
		
		
});